/**!
 * 
 * 主工具。
 * 
 * @author ChenYong
 * @date 2015-10-23
 * 
 */



//--------------------[常量定义]--------------------/
/** 用户名的正则表达式 */
var usernameRE = /^\w{5,20}$/;
/** 邮箱的正则表达式 */
var mailRE = /^[a-zA-Z0-9.!#$%&'*+\/=?^_`{|}~-]+@[a-zA-Z0-9](?:[a-zA-Z0-9-]{0,61}[a-zA-Z0-9])?(?:\.[a-zA-Z0-9](?:[a-zA-Z0-9-]{0,61}[a-zA-Z0-9])?)*$/;
/** 手机号的正则表达式 */
var phoneRE = /^1[3-9][0-9]{9}$/;
/** 密码的正则表达式 */
var passwdRE = /^[0-9a-zA-Z]{6,20}$/;
/** 验证码的正则表达式 */
var captchaRE = /^[0-9A-Za-z]{6}$/;
/** 完整 URL 的正则表达式 */
var urlFullRE = /^(?:(?:(?:https?|ftp):)?\/\/)(?:\S+(?::\S*)?@)?(?:(?!(?:10|127)(?:\.\d{1,3}){3})(?!(?:169\.254|192\.168)(?:\.\d{1,3}){2})(?!172\.(?:1[6-9]|2\d|3[0-1])(?:\.\d{1,3}){2})(?:[1-9]\d?|1\d\d|2[01]\d|22[0-3])(?:\.(?:1?\d{1,2}|2[0-4]\d|25[0-5])){2}(?:\.(?:[1-9]\d?|1\d\d|2[0-4]\d|25[0-4]))|(?:(?:[a-z\u00a1-\uffff0-9]-*)*[a-z\u00a1-\uffff0-9]+)(?:\.(?:[a-z\u00a1-\uffff0-9]-*)*[a-z\u00a1-\uffff0-9]+)*(?:\.(?:[a-z\u00a1-\uffff]{2,})).?)(?::\d{2,5})?(?:[/?#]\S*)?$/;
/** 部分 URL 的正则表达式 */
var urlOnlyRE = /^\/web\/\w+(\/\w+)*((.html)|(.json))(\?\S+)?$/;
/** 中文的正则表达式 */
var chineseRE = /^[\u4e00-\u9fa5\w\/]+$/;
/** 编码的正则表达式 */
var codeRE = /^[A-Z]+[0-9A-Z]*$/;
/** Font Awesome 字体正则表达式 */
var fontAwesomeRE = /^(fa fa-)\w([\-]?\w+)*$/;
/** 数字的正则表达式 */
var numberRE = /^[0-9]+$/;
/** 字典代码的正则表达式 */
var dictCodeRE = /^D[0-9]{1,10}$/;
/** 价格的正则表达式 */
var priceRE = /^[0-9]{1,8}(\.[0-9][0-9]?)?$/;
/** 阿里巴巴图标的正则表达式 */
var iconfontRE = /^(iconfont icon-)\w([\-]?\w+)*$/;
/** 权限的正则表达式 */
var permissionRE = /^[a-z][0-9a-z_]*:((\*)|[0-9a-z_]+)$/;
/** 角色的正则表达式 */
var roleRE = /^[a-z][0-9a-z_]*$/;
//--------------------[/常量定义]--------------------/



//--------------------[添加原型方法]--------------------//
/**
 * 
 * 替换所有旧字符串。
 * 
 * @param oldStr 旧字符串
 * @param newStr 新字符串
 * @returns 替换后的字符串
 * 
 */
String.prototype.replaceAll = function(oldStr, newStr) {
	return this.replace(new RegExp(oldStr, "gm"), newStr);
};

/**
 * 
 * 格式化字符串。<br>
 * 两种调用方式：<br>
 * var s1 = "我是{0}，今年{1}了";<br>
 * var s2 = "我是{name}，今年{age}了";<br>
 * var result1 = s1.format("loogn", 22);<br>
 * var result2 = s2.format({name : "loogn", age : 22});<br>
 * 结果：“我是loogn，今年22了”。<br>
 * 
 * @param param 参数
 * @returns {String} 格式化后的字符串
 * 
 */
String.prototype.format = function(param) {
	if (arguments.length > 0) {
		var result = this;
		
		if ((arguments.length === 1) && ($.type(param) === "object")) {
			for (var key in param) {
				var reg = new RegExp("({" + key + "})", "g");
				
				result = result.replace(reg, param[key]);
			}
		} else {
			for (var i = 0; i < arguments.length; i++) {
				if ($.type(arguments[i]) === "undefined") {
					return "";
				} else {
					var reg = new RegExp("({[" + i + "]})", "g");
					
					result = result.replace(reg, arguments[i]);
				}
			}
		}
		
		return result;
	} else {
		return this;
	}
};

/**
 * 
 * 日期、时间格式化。<br>
 * 例如：<br>
 * var date = new Date();<br>
 * var dateStr = date.format("yyyy-MM-dd hh:mm:ss");
 * 
 * @param format 格式
 * @returns {String} 格式化后的日期、时间字符串
 * 
 */
Date.prototype.format = function(format) {
	var o = {
		"M+" : this.getMonth() + 1, // 月
		"d+" : this.getDate(), // 日
		"H+" : this.getHours(), // 24小时制
		"m+" : this.getMinutes(), // 分
		"s+" : this.getSeconds(), // 秒
		"q+" : Math.floor((this.getMonth() + 3) / 3), // quarter
		"S" : this.getMilliseconds() // 毫秒
	};

	if (/(y+)/.test(format)) {
		format = format.replace(RegExp.$1, (this.getFullYear() + "").substr(4 - RegExp.$1.length));
	}

	for (var k in o) {
		if (new RegExp("(" + k + ")").test(format)) {
			format = format.replace(RegExp.$1, ((RegExp.$1.length == 1) ? o[k] : ("00" + o[k]).substr(("" + o[k]).length)));
		}
	}
	
	return format;
}
//--------------------[添加原型方法]--------------------//